package com.example.deom.common;

import org.springframework.jca.cci.object.SimpleRecordOperation;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * 密码工具类
 * 加盐加密/加盐解密
 */
public class PasswordTools {
    /**
     * 加盐加密
     * @param password
     * @return
     */
    public static String encrypt(String password){
        //1.产生盐值
        String salt = UUID.randomUUID().toString().replace("-","");
        //2.使用(盐值+明文密码)得到加密的密码
        String finalPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //3.将盐值和加密的密码共同返回(合并盐值和加密密码)
        String dpPassword = salt +"$" + finalPassword;
        return dpPassword;
    }

    /**
     *验证加盐加密密码
     * @param password 明文密码
     * @param salt 盐值
     * @return
     */
    public static String encrypt(String password,String salt){
        //1.使用(盐值+明文密码)得到加密的密码
        String finalPassword = DigestUtils.md5DigestAsHex((salt+password).getBytes());
        //2.将盐值和加密的密码共同返回(合并盐值和加密密码)
        String dpPassword = salt +"$" + finalPassword;
        return dpPassword;
    }





    /**
     * 验证加盐加密密码
     * @param password
     * @param dpPassword
     * @return
     */
    public static boolean decrypt(String password,String dpPassword){
        boolean result = false;
        if(StringUtils.hasLength(password) && StringUtils.hasLength(dpPassword)&& dpPassword.length()== 65
         && dpPassword.contains("$")){
            //1.得到盐值
            String[] passwordArr = dpPassword.split("\\$");
            //1.1盐值
            String salt = passwordArr[0];

            //2.生成验证密码的加盐加密密码
            String checkPassword = encrypt(password,salt);
            if(dpPassword.equals(checkPassword)){
                return true;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        String str = "123456";
        System.out.println(encrypt(str));
    }
}
